package com.zhoug.mpchart;

import android.graphics.Color;
import android.graphics.Typeface;

import com.github.mikephil.charting.charts.BarLineChartBase;
import com.github.mikephil.charting.charts.HorizontalBarChart;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.charts.RadarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.zhoug.mpchart.formatters.MPAxisTextValueFormatter;

/**
 * 图表通用配置
 *
 * @Author: zhoug
 * @Date: 2024-01-30
 * @Description:
 */
public class MPChartConfig {
    public static boolean DEBUG = true;//是否开启debug日期
    public static float DEFAULT_BAR_WIDTH = 0.3f;
    public static int DEFAULT_ONE_SCREEN = 6;//一屏显示多少

    //图例文字大小
    public static int LEGEND_TEXT_SIZE = 12;//dp
    //图例文字颜色
    public static int LEGEND_TEXT_COLOR = Color.parseColor("#555555");
    //柱状图柱子宽度
    public static float BAR_WIDTH = 0.3f;
    //组间柱子的间距
    public static final float GROUP_SPACE = 0.3f;
    //分组是2个柱子之间的间距
    public static final float BAR_SPACE = 0.03f;

    //坐标轴文字颜色
    public static int AXIS_TEXT_COLOR = Color.parseColor("#555555");
    //坐标轴线颜色
    public static int AXIS_LINE_COLOR = Color.parseColor("#555555");
    //坐标轴网格线颜色
    public static int AXIS_GRID_COLOR = Color.parseColor("#555555");
    public static int ANIMATE_DURING = 400;//动画时间
    //###################曲线图######################
    public static float LINE_WIDTH = 2;//折线宽度
    public static float LINE_CIRCLE_RADIUS = 4;//连接点的半径
    public static float LINE_CIRCLE_HOLE_RADIUS = 2;//连接点中心半径
    public static int LINE_FILL_ALPHA = 20;//曲线底部填充透明度
    //###################饼图####################
    public static float PIE_SLICE_SPACE=2;//饼快之间的间隔 单位dp  pieDataSet.setSliceSpace();
    public static float PIE_CENTER_TEXT_SIZE=16;//中间的文字大小 dp
    public static int PIE_CENTER_TEXT_COLOR=0xff333333;//中间的文字颜色
    public static float PIE_HOLE_RADIUS=80;// 孔洞大小 单位%
    public static int PIE_TRANSPARENT_CIRCLE_ALPHA=80;// 孔洞外面圆环 透明度
    public static float PIE_TRANSPARENT_CIRCLE_RADIUS=45;// 孔洞外面圆环  半径

    public static float VALUE_TEXT_SIZE=12;// 12dp 图标绘制value时的文字大小
    public static int VALUE_TEXT_COLOR=Color.parseColor("#555555");// 图标绘制value时的文字颜色

    /**
     * 雷达图
     */
    public static int RADAR_WEB_COLOR=0xff555555;//中心的网线颜色,中心连接顶点的线
    public static int RADAR_WEB_COLOR_INNER=0xff555555;//五边形线颜色,一圈一圈的蛛网色
    public static float RADAR_WEB_LINE_WIDTH=0.5f;//中心连接顶点的线的宽度
    public static float RADAR_WEB_LINE_WIDTH_INNER=0.5f;//一圈一圈的蛛网线宽度

    public static void initChartConfig(BarLineChartBase<?> chart) {
        //关闭描述
        chart.getDescription().setEnabled(false);
        //x,y不能同时缩放
        chart.setPinchZoom(false);
        //关闭双击缩放
        chart.setDoubleTapToZoomEnabled(false);
        //设置x轴
        XAxis xAxis = chart.getXAxis();
        setXAxisConfig(xAxis);
        //设置左轴
        YAxis leftAxis = chart.getAxisLeft();
        setYAxisConfig(leftAxis);
        //设置右轴
        YAxis rightAxis = chart.getAxisRight();
        setYAxisConfig(rightAxis);
        if(chart instanceof HorizontalBarChart){
            // x,y交换位置了
            chart.setScaleYEnabled(true);//可以缩放左坐标
            chart.setScaleXEnabled(false);//禁止缩放上下坐标
            leftAxis.setEnabled(false);
            rightAxis.setEnabled(true);
        }else{
            //禁止Y轴缩放
            chart.setScaleYEnabled(false);
            leftAxis.setEnabled(true);
            rightAxis.setEnabled(false);
        }


        //设置默认图裂样式
        setLegendStyle(chart.getLegend());
    }

    public static void setXAxisConfig(XAxis xAxis) {
        //坐标轴在下方
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //默认画x轴的标签
        xAxis.setDrawLabels(true);
        //默认不显示x轴的网格线
        xAxis.setDrawGridLines(false);
        //默认画x轴线
        xAxis.setDrawAxisLine(true);
        //x轴文字颜色
        int axisXColor = AXIS_TEXT_COLOR;
        xAxis.setTextColor(axisXColor);
        //轴线颜色
        xAxis.setAxisLineColor(axisXColor);
        //轴线宽度
        xAxis.setAxisLineWidth(0.5f);
        xAxis.setGranularity(1);//x轴数据设置最小间隔
        xAxis.setAxisMinimum(0.5f);//数据不要占y轴上
    }

    public static void setYAxisConfig(YAxis yAxis){
        //设置y标签的位置
        yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //网格线颜色
        yAxis.setGridColor(AXIS_GRID_COLOR);
        //画网格线
        yAxis.setDrawGridLines(false);
        //绘制网格0线
        yAxis.setDrawZeroLine(false);
        //绘制坐标轴线
        yAxis.setDrawAxisLine(true);
        yAxis.setAxisLineWidth(0.5f);
        //设置标签文字颜色
        yAxis.setTextColor(AXIS_TEXT_COLOR);
        //设置轴线颜色
        yAxis.setAxisLineColor(AXIS_LINE_COLOR);
        //绘制标签
        yAxis.setDrawLabels(true);
        yAxis.setGranularity(1);//最小间隔
        yAxis.setAxisMinimum(0);//最小值
        yAxis.setSpaceTop(10);//顶部距离
        yAxis.setSpaceBottom(12);//底部距离
    }

    /**
     * 默认饼图样式
     * @param pieChart
     */
    public static void initPieChartConfig(PieChart pieChart){
        pieChart.setNoDataText(null);
        //不显示Description,默认true会显示默认描述
        pieChart.getDescription().setEnabled(false);
        //设置是否使用百分值
        pieChart.setUsePercentValues(false);
        //默认不显示中间的文字
        pieChart.setDrawCenterText(false);
        pieChart.setCenterTextSize(PIE_CENTER_TEXT_SIZE);
        pieChart.setCenterTextColor(PIE_CENTER_TEXT_COLOR);
        pieChart.setCenterTextTypeface(Typeface.DEFAULT_BOLD);
        //设置中间的孔洞
        pieChart.setDrawHoleEnabled(true);
        //孔洞大小
        pieChart.setHoleRadius(PIE_HOLE_RADIUS);//80%
        pieChart.setHoleColor(0);
        //半透明圆,孔洞外面圆环,
        pieChart.setTransparentCircleAlpha(PIE_TRANSPARENT_CIRCLE_ALPHA);
        pieChart.setTransparentCircleRadius(PIE_TRANSPARENT_CIRCLE_RADIUS);//45%


        //设置旋转度数
        pieChart.setRotationAngle(0);
        // 触摸旋转,可以手动旋转
        pieChart.setRotationEnabled(false);
        pieChart.setHighlightPerTapEnabled(true);
        //在环上不显示标记
        pieChart.setDrawEntryLabels(false);
        //设置自动计算偏移量后附加的额外偏移量
        pieChart.setExtraOffsets(0, 5, 0, 5);

        //默认图裂
        Legend legend = pieChart.getLegend();
        setLegendStyle(legend);
    }

    /**
     * 默认雷达图样式
     * @param radarChart
     */
    public static void initRadarChartConfig(RadarChart radarChart){
        radarChart.setNoDataText(null);
        //不显示Description,默认true会显示默认描述
        radarChart.getDescription().setEnabled(false);
        radarChart.setWebColor(RADAR_WEB_COLOR);////设置中心的网线颜色,中心连接顶点的线
        radarChart.setWebColorInner(RADAR_WEB_COLOR_INNER);//设置五边形线颜色,一圈一圈的蛛网色
        radarChart.setWebLineWidth(RADAR_WEB_LINE_WIDTH);
        radarChart.setWebLineWidthInner(RADAR_WEB_LINE_WIDTH_INNER);
        radarChart.setRotationEnabled(false);
        //设置x轴 五边形顶
        XAxis xAxis =  radarChart.getXAxis();
        //坐标轴在下方
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //默认画x轴的标签
        xAxis.setDrawLabels(true);
        //默认不显示x轴的网格线
        xAxis.setDrawGridLines(false);
        //默认画x轴线
        xAxis.setDrawAxisLine(true);
        MPAxisTextValueFormatter axisTextValueFormatter = new MPAxisTextValueFormatter();
        axisTextValueFormatter.setMinValue(0);
        xAxis.setValueFormatter(axisTextValueFormatter);
        //x轴文字颜色
        xAxis.setTextColor(AXIS_TEXT_COLOR);
        //轴线颜色
        xAxis.setAxisLineColor(AXIS_LINE_COLOR);
        //轴线宽度
        xAxis.setAxisLineWidth(0.5f);
        xAxis.setGranularity(1);//x轴数据设置最小间隔
        xAxis.setAxisMinimum(0);//

        //设置Y轴>>>>>>>>>>>>>>>>>>>>
        //隐藏右边的y坐标
        YAxis yAxis = radarChart.getYAxis();
        //设置y标签的位置
        yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        //网格线颜色
        yAxis.setGridColor(AXIS_GRID_COLOR);
        //画网格线
        yAxis.setDrawGridLines(false);
        //绘制网格0线
        yAxis.setDrawZeroLine(false);
        //绘制坐标轴线
        yAxis.setDrawAxisLine(true);
        yAxis.setAxisLineWidth(0.5f);
        //设置标签文字颜色
        yAxis.setTextColor(AXIS_TEXT_COLOR);
        //设置轴线颜色
        yAxis.setAxisLineColor(AXIS_LINE_COLOR);
        //绘制标签
        yAxis.setDrawLabels(false);
        yAxis.setGranularity(1);//最小间隔
        yAxis.setAxisMinimum(0);//最小值
        yAxis.setSpaceTop(0f);//顶部距离
        yAxis.setSpaceBottom(0f);//底部距离
        yAxis.setLabelCount(6, true);
        //默认图裂
        Legend legend = radarChart.getLegend();
        setLegendStyle(legend);
        legend.setEnabled(false);
    }

    /**
     * 设置坐标轴是百分比
     *
     * @param axis
     * @param multiply100 true:0-1,false:0-100
     */
    public static void setPercentAxis(YAxis axis, boolean multiply100) {
        axis.setAxisMinimum(0);//最小值
        if (multiply100) {
            axis.setAxisMaximum(1.0f);//最大值
            axis.setGranularity(0.2f);
        } else {
            axis.setAxisMaximum(100f);//最大值
            axis.setGranularity(20f);
        }
        axis.setLabelCount(6, true);

    }

    /**
     * 设置默认图裂样式
     *
     * @param legend
     */
    public static void setLegendStyle(Legend legend) {
        //换行
        legend.setWordWrapEnabled(true);
        legend.setTextColor(LEGEND_TEXT_COLOR);//图例文字颜色
        legend.setDrawInside(false);//设置图例是在图表内部还是外部绘制
        legend.setTextSize(LEGEND_TEXT_SIZE);//文字大小
        legend.setForm(Legend.LegendForm.CIRCLE);//圆形图例
        //设置每一个legend的排列方式
        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        legend.setFormSize(5);
        legend.setXEntrySpace(5f);
        legend.setYEntrySpace(2f);
        //图例的x,y轴偏移量
        legend.setYOffset(10);//可以让图裂和图标之间间隔距离
        legend.setXOffset(10);
    }




}
